यदि आपके GitOps परिनियोजन मॉडल में सुरक्षा समस्याएँ हैं (उदाहरण के लिए, टाइपो के कारण गलत कॉन्फ़िगर की गई अनुमति), तो इसे तब तक प्रचारित किया जाएगा जब तक कि इसे रनटाइम पर उम्मीद से खोजा नहीं जाता है , जहां अधिकांश सुरक्षा ईवेंट स्कैन या पाए जाते हैं।
क्या होगा यदि आप स्रोत पर अपने बुनियादी ढांचे में संभावित सुरक्षा मुद्दों को ठीक कर सकते हैं?
आइए मूल बातें शुरू करें।
गिट एक खुला स्रोत वितरित संस्करण नियंत्रण प्रणाली है । यह फाइलों में किए गए परिवर्तनों को ट्रैक करता है (आमतौर पर टेक्स्ट फाइलें जैसे स्रोत कोड) एक सहयोगी कार्य मॉडल को अनुमति और बढ़ावा देता है । यह आजकल वर्जन कंट्रोल सिस्टम में the_ de facto _standard है।
आप अपने लैपटॉप पर स्थानीय रूप से अपना खुद का गिट रेपो रख सकते हैं, इसे अपने सर्वर पर होस्ट कर सकते हैं, या कुछ प्रदाता जैसे गिटलैब या गिटहब का उपयोग कर सकते हैं।
रिपॉजिटरी (गिट-फ्लो, जीथब-फ्लो, आदि) को कैसे प्रबंधित किया जाए, इस पर अलग-अलग "प्रवाह" हैं, लेकिन गिट का उपयोग कैसे किया जाता है, इसका एक मूल उदाहरण कुछ इस तरह है: फाइलों में परिवर्तन उपयोगकर्ताओं द्वारा "प्रतिबद्ध" हैं भंडार को "फोर्किंग" करना और "शाखा" में उचित परिवर्तन करना।
फिर, उपयोगकर्ता रिपॉजिटरी में उन परिवर्तनों को शामिल करने के लिए एक अनुरोध (या तो "पुल अनुरोध", "मर्ज अनुरोध", या बस "एक पैच भेजें") बनाता है।
उसके बाद, आमतौर पर "मालिक" और अनुरोध करने वाले उपयोगकर्ता के बीच एक चर्चा होती है, और यदि सब कुछ ठीक हो जाता है तो परिवर्तन स्वीकार कर लिया जाता है और भंडार में जोड़ा जाता है।
नोट: यदि आप अधिक जानना चाहते हैं, तो यहां गिट पुल अनुरोध तंत्र के बारे में अधिक विस्तृत जानकारी है।
एक वास्तविक दुनिया का उदाहरण देखने के लिए, बस अपने पसंदीदा ओपन सोर्स GitLab या GitHub रिपॉजिटरी को ब्राउज़ करें और पुल रिक्वेस्ट (या मर्ज रिक्वेस्ट) टैब ब्राउज़ करें (या इसे मज़ेदार के लिए देखें)। आप प्रस्तावित परिवर्तन, टिप्पणियां, लेबल, जिन्होंने परिवर्तनों का प्रस्ताव रखा, प्रस्तावित परिवर्तनों के विरुद्ध सत्यापन चलाने वाले उपकरण, रिपॉजिटरी देखने वाले लोगों को भेजी गई सूचनाएं आदि देख सकते हैं।
सीधे शब्दों में कहें तो, GitOps सिर्फ एक कार्यप्रणाली है जो आपके सॉफ़्टवेयर परिसंपत्तियों के लिए सत्य के एकल स्रोत के रूप में git रिपॉजिटरी का उपयोग करती है ताकि आप अपने सॉफ़्टवेयर के लिए git परिनियोजन मॉडल (पुल अनुरोध, रोलबैक, अनुमोदन, आदि) का लाभ उठा सकें।
किताबें ( द पाथ टू गिटऑप्स , गिटऑप्स और कुबेरनेट्स या गिटऑप्स क्लाउड-नेटिव कंटीन्यूअस डिप्लॉयमेंट ), श्वेतपत्र , और अधिक ब्लॉग पोस्ट हैं जिन्हें हम गिनने के लिए प्रबंधित कर सकते हैं , लेकिन आइए हम गिटऑप्स के उद्देश्य के बारे में विस्तार से देखें कि चीजें कैसे विकसित हुईं पिछले पांच बरसों में।
क्लाउड से पहले, आपके एप्लिकेशन को होस्ट करने के लिए एक नया सर्वर जोड़ने में सप्ताह लगते थे। आपको अनुमति मांगनी थी, इसे खरीदना था और बहुत सारे मैन्युअल कार्य करने थे। फिर, वर्चुअलाइजेशन ने चीजों को बहुत आसान बना दिया। आप कुछ विशिष्टताओं के साथ एक वर्चुअल मशीन का अनुरोध करते हैं और कुछ मिनटों के बाद, आपके पास उस तक पहुंच होती है।
फिर, बादल। सर्वर, नेटवर्क, स्टोरेज और यहां तक कि डेटाबेस, मैसेजिंग क्यू, कंटेनर, मशीन लर्निंग स्टफ, सर्वरलेस… का अनुरोध करना सिर्फ एक एपीआई कॉल दूर है! आप इसके लिए अनुरोध करते हैं और कुछ सेकंड बाद, आप इसे वैसे ही प्राप्त करते हैं। आप जो उपयोग करते हैं उसके लिए आपको केवल भुगतान करना होगा। इसका मतलब यह भी है कि बुनियादी ढांचे को एपीआई कॉल करने वाले कोड के रूप में प्रबंधित किया जा सकता है ... और आप अपना कोड कहां स्टोर करते हैं? एक गिट भंडार (या किसी अन्य सामग्री संस्करण प्रणाली) में।
GitOps शब्द को 2017 में Weaveworks द्वारा वापस गढ़ा गया था, और OpenGitOps की व्याख्या करते हुए, एक GitOps सिस्टम निम्नलिखित सिद्धांतों पर आधारित है:
GitOps कार्यप्रणाली का सार मूल रूप से आपके क्लस्टर पर चलने वाला एक कुबेरनेट्स नियंत्रक या नियंत्रक (या एजेंट) है जो इसके ऊपर चल रहे कुबेरनेट्स ऑब्जेक्ट को देखता है (एक CustomResource द्वारा परिभाषित) वर्तमान स्थिति की तुलना Git रेपो में निर्दिष्ट स्थिति से करता है । यदि यह मेल नहीं खाता है, तो यह रिपोजिटरी में पाए गए मैनिफेस्ट को लागू करके एप्लिकेशन को सुधारता है।
नोट: GitOps के लिए कुछ अलग दृष्टिकोण हैं, उदाहरण के लिए, पुश बनाम पुल, कॉन्फ़िगरेशन प्रबंधन को कैसे संभालना है, आदि। वे उन्नत विषय हैं, लेकिन अभी के लिए, मूल बातों से चिपके रहें।
निम्नलिखित आरेख एक सरलीकृत GitOps सिस्टम दिखाता है:
Git पर आधारित होने का अर्थ है डेवलपर्स के लिए घर्षण रहित। उन्हें इंटरैक्ट करने के लिए किसी नए टूल के बारे में चिंता करने की ज़रूरत नहीं है, बल्कि गिट रिपॉजिटरी में कोड को प्रबंधित करने के लिए उपयोग की जाने वाली समान प्रथाओं को लागू करने की आवश्यकता नहीं है।
GitOps टूल के बारे में बोलते हुए, कुछ पहले से ही उपलब्ध हैं, जिनमें Flux या ArgoCD जैसे ओपन सोर्स टूल शामिल हैं, दोनों CNCF इनक्यूबेटिंग प्रोजेक्ट हैं ।
GitOps के माध्यम से एप्लिकेशन की परिभाषा कैसी दिखती है, इसे महसूस करने के लिए, यह Flux या ArgoCD द्वारा प्रबंधित एक साधारण एप्लिकेशन (GitHub रिपॉजिटरी में संग्रहीत) का एक उदाहरण है।
फ्लक्स के साथ:
--- apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: GitRepository metadata: name: my-example-app namespace: hello-world spec: interval: 30s ref: branch: master url: https://github.com/xxx/my-example-apps.git --- apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization metadata: name: my-example-app namespace: hello-world spec: interval: 5m0s path: ./myapp prune: true sourceRef: kind: GitRepository name: my-example-app targetNamespace: hello-world
ArgoCD के साथ:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-example-app namespace: hello-world spec: destination: namespace: my-example-app server: https://kubernetes.default.svc project: default source: path: myapp/ repoURL: https://github.com/xxx/my-example-apps.git targetRevision: HEAD syncPolicy: automated: {} syncOptions: - CreateNamespace=true
दोनों गिट रिपॉजिटरी का संदर्भ देते हैं जहां एप्लिकेशन मेनिफेस्ट संग्रहीत होते हैं (परिनियोजन), नामस्थान, और कुछ और विवरण।
इन्फ्रास्ट्रक्चर कोड के रूप में विभिन्न तकनीकों और उपकरणों का उपयोग करके आपके इंफ्रास्ट्रक्चर के बिल्डिंग ब्लॉक्स को कोड के रूप में मानने की एक पद्धति है। इसका मतलब यह है कि मैन्युअल रूप से अपने पसंदीदा इंफ्रास्ट्रक्चर प्रदाता वेब इंटरफेस के माध्यम से अपने बुनियादी ढांचे जैसे वीएम, कंटेनर, नेटवर्क या स्टोरेज को मैन्युअल रूप से बनाने के बजाय, आप उन्हें कोड के रूप में परिभाषित करते हैं, और फिर वे आपके द्वारा चुने गए टूल द्वारा बनाए/अपडेट/प्रबंधित होते हैं, जैसे टेराफॉर्म , क्रॉसप्लेन , या पुलुमी , दूसरों के बीच में।
लाभ बहुत बड़े हैं। आप अपने बुनियादी ढांचे का प्रबंधन कर सकते हैं जैसे कि यह कोड था (यह अब कोड है) और अपनी आधारभूत संरचना संपत्तियों के लिए अपने विकास सर्वोत्तम प्रथाओं (स्वचालन, परीक्षण, पता लगाने योग्यता, संस्करण नियंत्रण इत्यादि) का लाभ उठाएं। वास्तव में, एक शब्द के रूप में "इंफ्रास्ट्रक्चर के रूप में सॉफ्टवेयर" का उपयोग करने की प्रवृत्ति है क्योंकि यह सिर्फ कोड से कहीं अधिक है।
इस विषय पर बहुत सारी जानकारी है, लेकिन निम्नलिखित संसाधन एक अच्छा प्रारंभिक बिंदु है।
जैसा कि आप शायद समझ गए हैं, GitOps इन्फ्रास्ट्रक्चर को परिभाषित करने के लिए घोषणात्मक मॉडल के रूप में इन्फ्रास्ट्रक्चर को कोड के रूप में उपयोग करता है। वास्तव में, IaC GitOps के आधारशिलाओं में से एक है! लेकिन यह बहुत अधिक है क्योंकि IaC बाकी GitOps सिद्धांतों को अनिवार्य नहीं करता है।
"DevOps" शब्द की बहुत सारी परिभाषाएँ हैं। यह निर्भर करता है कि आप किससे पूछते हैं लेकिन इसे सीधे शब्दों में कहें तो, "DevOps, घर्षण को कम करने वाले और उच्च गति के लिए सॉफ़्टवेयर बनाने और वितरित करने के लिए प्रथाओं और उपकरणों का संयोजन है।"
DevOps कार्यप्रणाली GitOps का लाभ उठा सकती है क्योंकि GitOps एक ऐसा ढांचा प्रदान करता है जो DevOps प्रथाओं से मेल खाता है लेकिन यह कड़ाई से आवश्यक नहीं है।
NoOps को फॉरेस्टर द्वारा 2021 में गढ़ा गया था और यह संचालन को संभालने के लिए एक कट्टरपंथी दृष्टिकोण है जहां आईटी वातावरण सारगर्भित है और इस बिंदु पर स्वचालित है कि इसे मैन्युअल रूप से प्रबंधित करने की कोई आवश्यकता नहीं है।
GitOps Git रिपॉजिटरी में वांछित स्थिति वाले लोगों को हटाकर मैन्युअल परिवर्तनों को कम करने में मदद करता है, लेकिन संपूर्ण IT वातावरण में वास्तविक NoOps को लागू करना आज के वास्तविक लक्ष्य के बजाय एक आकांक्षात्मक लक्ष्य है ।
नहीं, कुबेरनेट्स, नियंत्रक पैटर्न और कुबेरनेट्स वस्तुओं को परिभाषित करने के लिए घोषणात्मक मॉडल GitOps कार्यप्रणाली के लिए एकदम सही मेल हैं, लेकिन इसका मतलब यह नहीं है कि GitOps कार्यप्रणाली Kubernetes के बिना लागू नहीं की जा सकती है। कुबेरनेट्स के बाहर GitOps का उपयोग करने में कुछ चुनौतियाँ हैं, जैसे कि idempotency को संभालना, संपत्ति को हटाना / बनाना, गुप्त प्रबंधन, आदि। लेकिन GitOps सिद्धांतों को Kubernetes के बिना लागू किया जा सकता है (और थोड़ी रचनात्मकता को लागू करना)।
आइए अब सुरक्षा पहलुओं के बारे में बात करते हैं। अधिकांश सुरक्षा उपकरण रनटाइम पर संभावित कमजोरियों और मुद्दों का पता लगाते हैं (बहुत देर से)। उन्हें ठीक करने के लिए, या तो एक प्रतिक्रियाशील मैनुअल प्रक्रिया को निष्पादित करने की आवश्यकता होती है (उदाहरण के लिए, आपके k8s ऑब्जेक्ट में kubectl एडिट के साथ सीधे एक पैरामीटर को संशोधित करना) या आदर्श रूप से, फिक्स स्रोत पर होगा और आपकी आपूर्ति श्रृंखला के साथ प्रचारित किया जाएगा। इसे " शिफ्ट सिक्योरिटी लेफ्ट " कहा जाता है। समस्या को ठीक करने से लेकर उसके होने से पहले उसे ठीक करने तक बहुत देर हो चुकी है।
इसका मतलब यह नहीं है कि हर सुरक्षा समस्या को स्रोत पर ठीक किया जा सकता है, लेकिन सीधे स्रोत पर सुरक्षा परत जोड़ने से कुछ समस्याओं को रोका जा सकता है।
सबसे पहले, सामान्य सुरक्षा सिफारिशें लागू होती हैं।
आइए कुछ परिदृश्य देखें जहां GitOps कार्यप्रणाली सामान्य रूप से आपकी सुरक्षा में सुधार कर सकती है:
वे लाभ आपकी सुरक्षा मुद्रा को बेहतर बनाने के लिए GitOps कार्यप्रणाली का उपयोग करने के औचित्य के लिए पर्याप्त हैं और वे बॉक्स से बाहर आ गए, लेकिन GitOps कुछ और चीजों का एक संयोजन है। हम और भी बहुत कुछ कर सकते हैं। GitHub, GitLab, और अन्य Git रिपॉजिटरी प्रदाता आपको अपने Git रिपॉजिटरी में किए गए परिवर्तनों के आधार पर क्रियाओं या पाइपलाइनों को चलाने की अनुमति देते हैं, जिसमें एक पुल अनुरोध भी शामिल है, इसलिए संभावनाएं अनंत हैं। कुछ उदाहरण:
GitOps कार्यप्रणाली परिनियोजन मॉडल में कुछ सुधार लाती है और तालिका में सुरक्षा लाभ बिना किसी अन्य उपकरण को जोड़े ।
यह सीधे स्रोत कोड में "शिफ्ट लेफ्ट" लेयर जोड़कर सुरक्षा मुद्रा में सुधार करता है और पुल-अनुरोध मॉडल के लचीलेपन के लिए धन्यवाद, आप रनटाइम को प्रभावित या संशोधित किए बिना आसानी से अतिरिक्त सुरक्षा जांच जोड़ सकते हैं।
यहाँ भी प्रकाशित हो चुकी है।.